// 引入模块
const express = require('express');
const fs = require('fs');
const path = require('path');

// 创建一个服务器
const app = express();

// 处理post请求传入的数据
app.use(express.json());
// 处理getq请求传入的数据
app.use(express.urlencoded());

// 跨域中间件
app.all('*', (req, res, next) => {
	// 设置允许访问的域名，* 表示所有域名都可以访问
	res.header('Access-Control-Allow-Origin', '*');
	// 允许的请求头
	res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization');
	// 允许的请求方法
	res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
	// 允许携带凭证（如 cookies）
	// res.header('Access-Control-Allow-Credentials', true);

	// 处理预检请求
	// if (req.method === 'OPTIONS') {
	// 	res.sendStatus(204);
	// } else {
	next();
	// }
});

// 获取数据文件函数
function getFile(pathname = './data/data.json') {
	return JSON.parse(fs.readFileSync(path.join(__dirname, pathname), 'utf-8') || '[]')
}

// 接口
// 获取备忘录接口
app.get('/getnotes', (request, response) => {
	// 获取文件
	const file = getFile();
	// 响应文件
	response.send({
		code: 200,
		message: '获取数据成功',
		data: file
	});
});
// 新建备忘录接口
app.post('/add', (request, response) => {
	// 获取文件
	const file = getFile();
	// 传入的数据为
	const data = request.body
	// console.log(data)
	// 写入文件
	file.unshift(data)
	fs.writeFileSync(path.join(__dirname, './data/data.json'), JSON.stringify(file))
	// 响应
	response.send({
		code: 200,
		message: 'add a new note success'
	})
})
// 获取详情接口
app.get('/detail', (request, response) => {
	// 传过来的数据
	const query = request.query
	// console.log(query)
	// 获取文件
	const file = getFile()
	// 返回响应
	response.send({
		code: 200,
		message: 'get ' + query.index + ' of file success',
		data: file[query.index]
	})
})
// 编辑接口
app.post('/edit', (request, response) => {
	// 获取传入的数据
	const data = request.body
	// console.log(data)
	// 获取文件
	const file = getFile()
	// 修改对应下标
	const index = data.index
	delete data.index
	file[index] = data
	// 写入文件
	fs.writeFileSync(path.join(__dirname, './data/data.json'), JSON.stringify(file))
	// 响应
	response.send({
		code: 200,
		message: 'edit ' + index + ' of file success'
	})
})
// 删除接口
app.get('/delete', (request, response) => {
	// 获取传入的数据
	const query = request.query
	// 获取文件
	const file = getFile()
	// 删除下标数据
	file.splice(query.index, 1)
	// 重新写入文件
	fs.writeFileSync(path.join(__dirname, './data/data.json'), JSON.stringify(file));
	// 响应
	response.send({
		code: 200,
		message: 'delete ' + query.index + ' of file success'
	})
})

// 端口
const port = 25040;
// monitor服务器, 配置port
app.listen(port, () => console.log(`back end port ${port} Or http://10.55.10.44:${port}`));
